/**
 * 校园二手交易平台 - 商品数据模型
 * 为校园二手交易平台设计的完整商品数据类型定义
 */

/**
 * 商品类别枚举
 */
export enum ProductCategory {
  /** 教材书籍 */
  TEXTBOOKS = 'textbooks',
  /** 电子产品 */
  ELECTRONICS = 'electronics',
  /** 服饰鞋包 */
  CLOTHING = 'clothing',
  /** 生活用品 */
  DAILY_GOODS = 'daily_goods',
  /** 体育用品 */
  SPORTS = 'sports',
  /** 学习用品 */
  STATIONERY = 'stationery',
  /** 宿舍用品 */
  DORMITORY = 'dormitory',
  /** 其他类别 */
  OTHER = 'other'
}

/**
 * 商品新旧程度枚举
 */
export enum ProductCondition {
  /** 全新 */
  NEW = 'new',
  /** 九成新 */
  LIKE_NEW = 'like_new',
  /** 八成新 */
  VERY_GOOD = 'very_good',
  /** 七成新 */
  GOOD = 'good',
  /** 六成新 */
  FAIR = 'fair',
  /** 五成新及以下 */
  POOR = 'poor'
}

/**
 * 交易方式枚举
 */
export enum TransactionMethod {
  /** 面交 */
  FACE_TO_FACE = 'face_to_face',
  /** 邮寄 */
  MAIL = 'mail',
  /** 面交或邮寄 */
  BOTH = 'both'
}

/**
 * 商品状态枚举
 */
export enum ProductStatus {
  /** 上架中 */
  ACTIVE = 'active',
  /** 已下架 */
  INACTIVE = 'inactive',
  /** 已售出 */
  SOLD = 'sold',
  /** 待审核 */
  PENDING = 'pending',
  /** 审核不通过 */
  REJECTED = 'rejected'
}

/**
 * 商品图片信息
 */
export interface ProductImage {
  /** 图片ID */
  id: string;
  /** 图片URL */
  url: string;
  /** 缩略图URL */
  thumbnailUrl?: string;
  /** 是否为封面图片 */
  isCover?: boolean;
  /** 图片描述 */
  description?: string;
  /** 上传时间 */
  uploadedAt: Date;
}

/**
 * 地理位置信息
 */
export interface LocationInfo {
  /** 所在学校 */
  school: string;
  /** 所在校区 */
  campus?: string;
  /** 具体位置描述 */
  address?: string;
  /** 经度 */
  longitude?: number;
  /** 纬度 */
  latitude?: number;
}

/**
 * 发布者信息
 */
export interface PublisherInfo {
  /** 用户ID */
  userId: string;
  /** 用户名 */
  username: string;
  /** 头像URL */
  avatar?: string;
  /** 学生认证状态 */
  isStudentVerified: boolean;
  /** 学校信息 */
  school?: string;
  /** 联系方式（可选） */
  contactInfo?: {
    phone?: string;
    wechat?: string;
    qq?: string;
  };
}

/**
 * 商品核心信息
 */
export interface ProductCoreInfo {
  /** 商品ID */
  id: string;
  /** 商品标题 */
  title: string;
  /** 商品描述 */
  description: string;
  /** 商品价格（单位：元） */
  price: number;
  /** 原价（如果适用） */
  originalPrice?: number;
  /** 商品类别 */
  category: ProductCategory;
  /** 新旧程度 */
  condition: ProductCondition;
  /** 交易方式 */
  transactionMethod: TransactionMethod;
}

/**
 * 商品扩展信息
 */
export interface ProductExtendedInfo {
  /** 商品图片列表 */
  images: ProductImage[];
  /** 地理位置信息 */
  location: LocationInfo;
  /** 发布者信息 */
  publisher: PublisherInfo;
  /** 发布时间 */
  publishedAt: Date;
  /** 最后更新时间 */
  updatedAt: Date;
  /** 商品状态 */
  status: ProductStatus;
  /** 浏览量 */
  viewCount: number;
  /** 收藏数 */
  favoriteCount: number;
  /** 咨询数 */
  inquiryCount: number;
}

/**
 * 完整的商品数据类型
 */
export interface Product extends ProductCoreInfo, ProductExtendedInfo {
  /** 商品标签（用于搜索和分类） */
  tags?: string[];
  /** 是否支持议价 */
  isNegotiable: boolean;
  /** 是否包邮 */
  isFreeShipping?: boolean;
  /** 邮费（如果不包邮） */
  shippingFee?: number;
  /** 库存数量 */
  stock: number;
  /** 是否支持退换货 */
  isReturnable: boolean;
  /** 退换货政策描述 */
  returnPolicy?: string;
  /** 自定义字段（用于扩展） */
  customFields?: Record<string, any>;
}

/**
 * 商品创建/编辑表单数据类型
 */
export interface ProductFormData {
  title: string;
  description: string;
  price: number;
  originalPrice?: number;
  category: ProductCategory;
  condition: ProductCondition;
  transactionMethod: TransactionMethod;
  tags?: string[];
  isNegotiable: boolean;
  isFreeShipping?: boolean;
  shippingFee?: number;
  stock: number;
  isReturnable: boolean;
  returnPolicy?: string;
  school: string;
  campus?: string;
  address?: string;
  longitude?: number;
  latitude?: number;
}

/**
 * 商品查询参数
 */
export interface ProductQueryParams {
  /** 搜索关键词 */
  keyword?: string;
  /** 商品类别 */
  category?: ProductCategory;
  /** 新旧程度 */
  condition?: ProductCondition;
  /** 交易方式 */
  transactionMethod?: TransactionMethod;
  /** 学校筛选 */
  school?: string;
  /** 校区筛选 */
  campus?: string;
  /** 价格范围 */
  priceRange?: {
    min?: number;
    max?: number;
  };
  /** 排序方式 */
  sortBy?: 'price' | 'publishedAt' | 'viewCount' | 'favoriteCount';
  /** 排序方向 */
  sortOrder?: 'asc' | 'desc';
  /** 页码 */
  page?: number;
  /** 每页数量 */
  pageSize?: number;
  /** 只显示上架商品 */
  onlyActive?: boolean;
}

/**
 * 商品列表响应数据
 */
export interface ProductListResponse {
  /** 商品列表 */
  products: Product[];
  /** 总数量 */
  total: number;
  /** 当前页码 */
  currentPage: number;
  /** 总页数 */
  totalPages: number;
  /** 每页数量 */
  pageSize: number;
}

/**
 * 商品统计信息
 */
export interface ProductStats {
  /** 总商品数 */
  totalProducts: number;
  /** 上架商品数 */
  activeProducts: number;
  /** 已售出商品数 */
  soldProducts: number;
  /** 今日新增商品 */
  todayNewProducts: number;
  /** 分类统计 */
  categoryStats: Record<ProductCategory, number>;
}

/**
 * 商品操作结果
 */
export interface ProductOperationResult {
  /** 操作是否成功 */
  success: boolean;
  /** 操作结果消息 */
  message: string;
  /** 操作后的商品数据 */
  product?: Product;
  /** 错误信息（如果操作失败） */
  error?: string;
}

/**
 * 商品搜索建议
 */
export interface ProductSearchSuggestion {
  /** 建议类型 */
  type: 'keyword' | 'category' | 'tag';
  /** 建议内容 */
  value: string;
  /** 相关商品数量 */
  count?: number;
}

/**
 * 商品收藏信息
 */
export interface ProductFavorite {
  /** 收藏ID */
  id: string;
  /** 商品ID */
  productId: string;
  /** 用户ID */
  userId: string;
  /** 收藏时间 */
  favoritedAt: Date;
  /** 商品信息（可选，用于展示） */
  product?: Product;
}

/**
 * 工具函数：验证商品数据
 */
export const validateProductData = (product: Partial<Product>): boolean => {
  if (!product.title || product.title.trim().length === 0) {
    return false;
  }
  if (!product.description || product.description.trim().length === 0) {
    return false;
  }
  if (!product.price || product.price < 0) {
    return false;
  }
  if (!product.category || !Object.values(ProductCategory).includes(product.category)) {
    return false;
  }
  if (!product.condition || !Object.values(ProductCondition).includes(product.condition)) {
    return false;
  }
  if (!product.transactionMethod || !Object.values(TransactionMethod).includes(product.transactionMethod)) {
    return false;
  }
  return true;
};

/**
 * 工具函数：生成商品摘要信息
 */
export const generateProductSummary = (product: Product): string => {
  const { title, price, condition, category } = product;
  return `${title} - ¥${price} - ${ProductCondition[condition]} - ${ProductCategory[category]}`;
};

/**
 * 工具函数：检查商品是否可购买
 */
export const isProductPurchasable = (product: Product): boolean => {
  return product.status === ProductStatus.ACTIVE && product.stock > 0;
};

/**
 * 工具函数：获取商品封面图片URL
 */
export const getProductCoverImage = (product: Product): string | null => {
  const coverImage = product.images.find(img => img.isCover);
  return coverImage?.url || (product.images.length > 0 ? product.images[0].url : null);
};

/**
 * 默认商品查询参数
 */
export const DEFAULT_PRODUCT_QUERY_PARAMS: ProductQueryParams = {
  page: 1,
  pageSize: 20,
  onlyActive: true,
  sortBy: 'publishedAt',
  sortOrder: 'desc'
};

/**
 * 商品类别显示名称映射
 */
export const PRODUCT_CATEGORY_DISPLAY_NAMES: Record<ProductCategory, string> = {
  [ProductCategory.TEXTBOOKS]: '教材书籍',
  [ProductCategory.ELECTRONICS]: '电子产品',
  [ProductCategory.CLOTHING]: '服饰鞋包',
  [ProductCategory.DAILY_GOODS]: '生活用品',
  [ProductCategory.SPORTS]: '体育用品',
  [ProductCategory.STATIONERY]: '学习用品',
  [ProductCategory.DORMITORY]: '宿舍用品',
  [ProductCategory.OTHER]: '其他类别'
};

/**
 * 商品新旧程度显示名称映射
 */
export const PRODUCT_CONDITION_DISPLAY_NAMES: Record<ProductCondition, string> = {
  [ProductCondition.NEW]: '全新',
  [ProductCondition.LIKE_NEW]: '九成新',
  [ProductCondition.VERY_GOOD]: '八成新',
  [ProductCondition.GOOD]: '七成新',
  [ProductCondition.FAIR]: '六成新',
  [ProductCondition.POOR]: '五成新及以下'
};

/**
 * 交易方式显示名称映射
 */
export const TRANSACTION_METHOD_DISPLAY_NAMES: Record<TransactionMethod, string> = {
  [TransactionMethod.FACE_TO_FACE]: '面交',
  [TransactionMethod.MAIL]: '邮寄',
  [TransactionMethod.BOTH]: '面交或邮寄'
};

/**
 * 商品状态显示名称映射
 */
export const PRODUCT_STATUS_DISPLAY_NAMES: Record<ProductStatus, string> = {
  [ProductStatus.ACTIVE]: '上架中',
  [ProductStatus.INACTIVE]: '已下架',
  [ProductStatus.SOLD]: '已售出',
  [ProductStatus.PENDING]: '待审核',
  [ProductStatus.REJECTED]: '审核不通过'
};